package com.zenith.middleware.service;

import com.zenith.common.result.Result;
import com.zenith.common.result.PageResult;
import com.zenith.middleware.po.dto.edu.*;
import com.zenith.middleware.po.vo.edu.*;

import java.util.List;

/**
 * 教育服务接口
 */
public interface EduService {
    
    // =========================== 课程管理相关接口 ===========================
    
    Result<EduCourseVO> createCourse(EduCourseDTO dto);

    Result<EduCourseVO> getCourseById(Long id);

    Result<EduCourseVO> updateCourse(EduCourseDTO dto);

    Result<Void> deleteCourse(Long id);

    Result<List<EduCourseVO>> getCourseList();

    // =========================== 班级管理相关接口 ===========================

    Result<EduClassVO> createClass(EduClassDTO dto);

    Result<EduClassVO> getClassById(Long id);

    Result<EduClassVO> updateClass(EduClassDTO dto);

    Result<Void> deleteClass(Long id);

    Result<List<EduClassVO>> getClassList();

    // =========================== 学生管理相关接口 ===========================

    Result<EduStudentVO> createStudent(EduStudentDTO dto);

    Result<EduStudentVO> getStudentById(Long id);

    Result<EduStudentVO> updateStudent(EduStudentDTO dto);

    Result<Void> deleteStudent(Long id);

    Result<List<EduStudentVO>> getStudentList();

    // =========================== 教师管理相关接口 ===========================

    Result<EduTeacherVO> createTeacher(EduTeacherDTO dto);

    Result<EduTeacherVO> getTeacherById(Long id);

    Result<EduTeacherVO> updateTeacher(EduTeacherDTO dto);

    Result<Void> deleteTeacher(Long id);

    Result<List<EduTeacherVO>> getTeacherList();

    // =========================== 作业管理相关接口 ===========================

    Result<EduAssignmentVO> createAssignment(EduAssignmentDTO dto);

    Result<EduAssignmentVO> getAssignmentById(Long id);

    Result<EduAssignmentVO> updateAssignment(EduAssignmentDTO dto);

    Result<Void> deleteAssignment(Long id);

    Result<List<EduAssignmentVO>> getAssignmentList();

    // =========================== 作业题目管理相关接口 ===========================

    Result<EduAssignmentQuestionVO> createAssignmentQuestion(EduAssignmentQuestionDTO dto);

    Result<EduAssignmentQuestionVO> getAssignmentQuestionById(Long id);

    Result<EduAssignmentQuestionVO> updateAssignmentQuestion(EduAssignmentQuestionDTO dto);

    Result<Void> deleteAssignmentQuestion(Long id);

    Result<List<EduAssignmentQuestionVO>> getAssignmentQuestionList();

    // =========================== 作业提交管理相关接口 ===========================

    Result<EduAssignmentSubmissionVO> createAssignmentSubmission(EduAssignmentSubmissionDTO dto);

    Result<EduAssignmentSubmissionVO> getAssignmentSubmissionById(Long id);

    Result<EduAssignmentSubmissionVO> updateAssignmentSubmission(EduAssignmentSubmissionDTO dto);

    Result<Void> deleteAssignmentSubmission(Long id);

    Result<List<EduAssignmentSubmissionVO>> getAssignmentSubmissionList();

    // =========================== 证书管理相关接口 ===========================

    Result<EduCertificateVO> createCertificate(EduCertificateDTO dto);

    Result<EduCertificateVO> getCertificateById(Long id);

    Result<EduCertificateVO> updateCertificate(EduCertificateDTO dto);

    Result<Void> deleteCertificate(Long id);

    Result<List<EduCertificateVO>> getCertificateList();

    // =========================== 章节管理相关接口 ===========================

    Result<EduChapterVO> createChapter(EduChapterDTO dto);

    Result<EduChapterVO> getChapterById(Long id);

    Result<EduChapterVO> updateChapter(EduChapterDTO dto);

    Result<Void> deleteChapter(Long id);

    Result<List<EduChapterVO>> getChapterList();

    Result<List<EduChapterVO>> getChaptersByCourseId(Long courseId);

    // =========================== 签到管理相关接口 ===========================

    Result<EduCheckinVO> createCheckin(EduCheckinDTO dto);

    Result<EduCheckinVO> getCheckinById(Long id);

    Result<EduCheckinVO> updateCheckin(EduCheckinDTO dto);

    Result<Void> deleteCheckin(Long id);

    Result<List<EduCheckinVO>> getCheckinList();

    // =========================== 签到记录管理相关接口 ===========================

    Result<EduCheckinRecordVO> createCheckinRecord(EduCheckinRecordDTO dto);

    Result<EduCheckinRecordVO> getCheckinRecordById(Long id);

    Result<EduCheckinRecordVO> updateCheckinRecord(EduCheckinRecordDTO dto);

    Result<Void> deleteCheckinRecord(Long id);

    Result<List<EduCheckinRecordVO>> getCheckinRecordList();

    // =========================== 课程班级关系管理相关接口 ===========================

    Result<EduCourseClassVO> createCourseClass(EduCourseClassDTO dto);

    Result<EduCourseClassVO> getCourseClassById(Long id);

    Result<EduCourseClassVO> updateCourseClass(EduCourseClassDTO dto);

    Result<Void> deleteCourseClass(Long id);

    Result<List<EduCourseClassVO>> getCourseClassList();

    // =========================== 课程评价管理相关接口 ===========================

    Result<EduCourseRatingVO> createCourseRating(EduCourseRatingDTO dto);

    Result<EduCourseRatingVO> getCourseRatingById(Long id);

    Result<EduCourseRatingVO> updateCourseRating(EduCourseRatingDTO dto);

    Result<Void> deleteCourseRating(Long id);

    Result<List<EduCourseRatingVO>> getCourseRatingList();

    // =========================== 课程选课管理相关接口 ===========================

    Result<EduCourseSelectionVO> createCourseSelection(EduCourseSelectionDTO dto);

    Result<EduCourseSelectionVO> getCourseSelectionById(Long id);

    Result<EduCourseSelectionVO> updateCourseSelection(EduCourseSelectionDTO dto);

    Result<Void> deleteCourseSelection(Long id);

    Result<List<EduCourseSelectionVO>> getCourseSelectionList();

    // =========================== 学分管理相关接口 ===========================

    Result<EduCreditVO> createCredit(EduCreditDTO dto);

    Result<EduCreditVO> getCreditById(Long id);

    Result<EduCreditVO> updateCredit(EduCreditDTO dto);

    Result<Void> deleteCredit(Long id);

    Result<List<EduCreditVO>> getCreditList();

    // =========================== 院系管理相关接口 ===========================

    Result<EduDepartmentVO> createDepartment(EduDepartmentDTO dto);

    Result<EduDepartmentVO> getDepartmentById(Long id);

    Result<EduDepartmentVO> updateDepartment(EduDepartmentDTO dto);

    Result<Void> deleteDepartment(Long id);

    Result<List<EduDepartmentVO>> getDepartmentList();

    // =========================== 考试记录管理相关接口 ===========================

    Result<EduExamRecordVO> createExamRecord(EduExamRecordDTO dto);

    Result<EduExamRecordVO> getExamRecordById(Long id);

    Result<EduExamRecordVO> updateExamRecord(EduExamRecordDTO dto);

    Result<Void> deleteExamRecord(Long id);

    Result<List<EduExamRecordVO>> getExamRecordList();

    // =========================== 论坛点赞管理相关接口 ===========================

    Result<EduForumLikeVO> createForumLike(EduForumLikeDTO dto);

    Result<EduForumLikeVO> getForumLikeById(Long id);

    Result<EduForumLikeVO> updateForumLike(EduForumLikeDTO dto);

    Result<Void> deleteForumLike(Long id);

    Result<List<EduForumLikeVO>> getForumLikeList();

    // =========================== 论坛回复管理相关接口 ===========================

    Result<EduForumReplyVO> createForumReply(EduForumReplyDTO dto);

    Result<EduForumReplyVO> getForumReplyById(Long id);

    Result<EduForumReplyVO> updateForumReply(EduForumReplyDTO dto);

    Result<Void> deleteForumReply(Long id);

    Result<List<EduForumReplyVO>> getForumReplyList();

    // =========================== 论坛主题管理相关接口 ===========================

    Result<EduForumTopicVO> createForumTopic(EduForumTopicDTO dto);

    Result<EduForumTopicVO> getForumTopicById(Long id);

    Result<EduForumTopicVO> updateForumTopic(EduForumTopicDTO dto);

    Result<Void> deleteForumTopic(Long id);

    Result<List<EduForumTopicVO>> getForumTopicList();

    // =========================== 知识点管理相关接口 ===========================

    Result<EduKnowledgePointVO> createKnowledgePoint(EduKnowledgePointDTO dto);

    Result<EduKnowledgePointVO> getKnowledgePointById(Long id);

    Result<EduKnowledgePointVO> updateKnowledgePoint(EduKnowledgePointDTO dto);

    Result<Void> deleteKnowledgePoint(Long id);

    Result<List<EduKnowledgePointVO>> getKnowledgePointList();

    // =========================== 直播课堂管理相关接口 ===========================

    Result<EduLiveSessionVO> createLiveSession(EduLiveSessionDTO dto);

    Result<EduLiveSessionVO> getLiveSessionById(Long id);

    Result<EduLiveSessionVO> updateLiveSession(EduLiveSessionDTO dto);

    Result<Void> deleteLiveSession(Long id);

    Result<List<EduLiveSessionVO>> getLiveSessionList();

    // =========================== 直播观看记录管理相关接口 ===========================

    Result<EduLiveWatchRecordVO> createLiveWatchRecord(EduLiveWatchRecordDTO dto);

    Result<EduLiveWatchRecordVO> getLiveWatchRecordById(Long id);

    Result<EduLiveWatchRecordVO> updateLiveWatchRecord(EduLiveWatchRecordDTO dto);

    Result<Void> deleteLiveWatchRecord(Long id);

    Result<List<EduLiveWatchRecordVO>> getLiveWatchRecordList();

    // =========================== 专业管理相关接口 ===========================

    Result<EduMajorVO> createMajor(EduMajorDTO dto);

    Result<EduMajorVO> getMajorById(Long id);

    Result<EduMajorVO> updateMajor(EduMajorDTO dto);

    Result<Void> deleteMajor(Long id);

    Result<List<EduMajorVO>> getMajorList();

    // =========================== 学习进度管理相关接口 ===========================

    Result<EduProgressVO> createProgress(EduProgressDTO dto);

    Result<EduProgressVO> getProgressById(Long id);

    Result<EduProgressVO> updateProgress(EduProgressDTO dto);

    Result<Void> deleteProgress(Long id);

    Result<List<EduProgressVO>> getProgressList();

    // =========================== 题库管理相关接口 ===========================

    Result<EduQuestionBankVO> createQuestionBank(EduQuestionBankDTO dto);

    Result<EduQuestionBankVO> getQuestionBankById(Long id);

    Result<EduQuestionBankVO> updateQuestionBank(EduQuestionBankDTO dto);

    Result<Void> deleteQuestionBank(Long id);

    Result<List<EduQuestionBankVO>> getQuestionBankList();

    // =========================== 题目管理相关接口 ===========================

    Result<EduQuestionVO> createQuestion(EduQuestionDTO dto);

    Result<EduQuestionVO> getQuestionById(Long id);

    Result<EduQuestionVO> updateQuestion(EduQuestionDTO dto);

    Result<Void> deleteQuestion(Long id);

    Result<List<EduQuestionVO>> getQuestionList();

    // =========================== 课程评价点赞管理相关接口 ===========================

    Result<EduRatingLikeVO> createRatingLike(EduRatingLikeDTO dto);

    Result<EduRatingLikeVO> getRatingLikeById(Long id);

    Result<EduRatingLikeVO> updateRatingLike(EduRatingLikeDTO dto);

    Result<Void> deleteRatingLike(Long id);

    Result<List<EduRatingLikeVO>> getRatingLikeList();

    // =========================== 课程资源管理相关接口 ===========================

    Result<EduResourceVO> createResource(EduResourceDTO dto);

    Result<EduResourceVO> getResourceById(Long id);

    Result<EduResourceVO> updateResource(EduResourceDTO dto);

    Result<Void> deleteResource(Long id);

    Result<List<EduResourceVO>> getResourceList();

    // =========================== 学校管理相关接口 ===========================

    Result<EduSchoolVO> createSchool(EduSchoolDTO dto);

    Result<EduSchoolVO> getSchoolById(Long id);

    Result<EduSchoolVO> updateSchool(EduSchoolDTO dto);

    Result<Void> deleteSchool(Long id);

    Result<List<EduSchoolVO>> getSchoolList();

    // =========================== 学生成绩管理相关接口 ===========================

    Result<EduStudentGradeVO> createStudentGrade(EduStudentGradeDTO dto);

    Result<EduStudentGradeVO> getStudentGradeById(Long id);

    Result<EduStudentGradeVO> updateStudentGrade(EduStudentGradeDTO dto);

    Result<Void> deleteStudentGrade(Long id);

    Result<List<EduStudentGradeVO>> getStudentGradeList();

    // =========================== 预警日志管理相关接口 ===========================

    Result<EduWarningLogVO> createWarningLog(EduWarningLogDTO dto);

    Result<EduWarningLogVO> getWarningLogById(Long id);

    Result<EduWarningLogVO> updateWarningLog(EduWarningLogDTO dto);

    Result<Void> deleteWarningLog(Long id);

    Result<List<EduWarningLogVO>> getWarningLogList();

    // =========================== 预警规则管理相关接口 ===========================

    Result<EduWarningRuleVO> createWarningRule(EduWarningRuleDTO dto);

    Result<EduWarningRuleVO> getWarningRuleById(Long id);

    Result<EduWarningRuleVO> updateWarningRule(EduWarningRuleDTO dto);

    Result<Void> deleteWarningRule(Long id);

    Result<List<EduWarningRuleVO>> getWarningRuleList();
}